package pe.com.bbva.threads;

import java.util.HashMap;
import java.util.List;

import javax.annotation.Resource;

import org.apache.log4j.Logger;

import pe.com.bbva.carga.bo.LoadClassTargpsBO;
import pe.com.bbva.carga.bo.UploadClassTargpsBO;
import pe.com.bbva.carga.domain.ArchivoCarga;
import pe.com.bbva.carga.domain.ProcesoCarga;
import pe.com.bbva.targps.domain.Tarjeta;
import pe.com.bbva.util.Constantes;
import pe.com.stefanini.core.domain.UsuarioSession;
import pe.com.stefanini.core.util.StringUtil;

public class HiloProceso implements Runnable {

	Logger logger = Logger.getLogger(this.getClass());

	@Resource
	private LoadClassTargpsBO loadClassTargpsBO;
	@Resource
	private UploadClassTargpsBO uploadClassTargpsBO;

	HashMap<String, Object> parametros = new HashMap<String, Object>();

	@SuppressWarnings("unchecked")
	@Override
	public synchronized void run() {
		logger.info("INICIO run()  HILOPROCESO: " + this.hashCode());
		try {
			switch ((Integer)parametros.get("proceso")) {
				case Constantes.PROCESO_CARGA_MANUAL:
				
				loadClassTargpsBO.cargarArchivo((ArchivoCarga) parametros.get("archivoCarga"));
					break;
				case Constantes.PROCESO_GENERACION_TARJETA:
					uploadClassTargpsBO.procesarTarjetas((List<Tarjeta>)parametros.get("tarjetas"),(Boolean)parametros.get("incluir"),(UsuarioSession)parametros.get("usuario") );
					//uploadClassTargpsBO.procesarTarjetas(tarjetas, incluir, usuarioSession);
					break;		
				case Constantes.PROCESO_GENERACION_ARCHIVO:
					uploadClassTargpsBO.procesarArchivos((List<ProcesoCarga>)parametros.get("procesos"),(UsuarioSession)parametros.get("usuario"));
					//uploadClassTargpsBO.procesarArchivos(procesos, usuarioSession);
					break;			
				default:
					break;
			}
		} catch (Exception e) {
			logger.error(StringUtil.getStackTrace(e));
		}
		logger.info("FIN run()  HILOPROCESO this.hashCode():" + this.hashCode());
	}

	public HashMap<String, Object> getParametros() {
		return parametros;
	}

	public void setParametros(HashMap<String, Object> parametros) {
		this.parametros = parametros;
	}
}